<?php

/**
 * 
 * Autor				: 	Juan Jose Muñiz Juarez
 * Fecha de Creacion	: 	29/04/2012,  03:40:44
 * Version 				: 	1.0
 * Descripcion 			:   Lee la base de datos y obtiene la informacion de todas las tablas correspondientes
 *                          para posteriormente generar las clases correspondientes
 */
if ( !defined ( "RUTA_FISICA_SISTEMA" ) )
  {
     require_once "../../../../config/Constantes.php";
  }

  $ruta_sistema = RUTA_FISICA_SISTEMA . "/sistema/";
  
  require_once $ruta_sistema . "general/clases/comun/generacion_modelo/ModeloBDMySQL.php";
  require_once $ruta_sistema . "general/clases/comun/generacion_modelo/GeneracionClases.php";

class ModeloBD
   {
      private $_tablas_generar; 
      private $_generar_clase;
      private $_generar_modelo;
      private $_clases ;
      private $_modelo;
      private $_ubicacion_clase;
      private $_ubicacion_modelo;
      
      /**
     * @param field_type $_ubicacion_clase
     */
    public function setUbicacion_clase ( $_ubicacion_clase )
         {
            $this->_ubicacion_clase = $_ubicacion_clase;
        }
   
	/**
     * @param field_type $_ubicacion_modelo
     */
    public function setUbicacion_modelo ( $_ubicacion_modelo )
         {
            $this->_ubicacion_modelo = $_ubicacion_modelo;
        }
   
	/**
       * 
       * Nombre         	: 	__construct
       * Descripcion   	:	
       * Version 			:  	1.0
       * Autor:			:	Juan Jose Muñiz Juarez
       * Fecha y Hora		:	29/04/2012, 12:41:50
       * @param unknown_type $tablas_generar
       * @param unknown_type $generar_modelo
       * @param unknown_type $generar_clase
       */
      function __construct( $tablas_generar = "", $generar_modelo = true, $generar_clase = false )
         {
            $this -> _tablas_generar = $tablas_generar;
            $this -> _generar_clase = $generar_clase;
            $this -> _generar_modelo = $generar_modelo;
         }
         
         
         /**
          * 
          * Nombre         	: 	getORM_ENGINE
          * Descripcion   	:	
          * Version 			:  	1.0
          * Autor:			:	Juan Jose Muñiz Juarez
          * Fecha y Hora		:	03/05/2012, 15:03:17
          * params: @return ModeloBDMySQL
          * return: ModeloBDMySQL
          */
       private function getORM_ENGINE( )
         {
            if ( !$this -> _modelo )
              {
                  if ( defined( "ORM_ENGINE_DATABASE" ) )
                    {
                       switch ( ORM_ENGINE_DATABASE )
                         {
                            case  ORM_ENGINE_MYSQL:
                               {
                                  $this -> _modelo = new ModeloBDMySQL( $this ->_tablas_generar, $this ->_generar_modelo, $this ->_generar_clase );
                               }
                         }
                    }
                  else
                    {
                       // Si no existe definido ningun motor de base de datos, se toma por default el de MySQL
                       $this -> _modelo = new ModeloBDMySQL( $this ->_tablas_generar, $this ->_generar_modelo, $this ->_generar_clase );
                    }  
              }
            else
              {
                 return $this -> _modelo;
              }  
         }  
        
         /**
          * 
          * Nombre         	: 	generarModelo
          * Descripcion   	:	
          * Version 		:  	1.0
          * Autor:			:	Juan Jose Muñiz Juarez
          * Fecha y Hora	:	03/05/2012, 15:04:45
          * @param unknown_type $conexion
          * @param unknown_type $tabla
          * @return GeneracionModelo|boolean
          */
       public function generarModelo( $conexion = null, $tabla = null  )
         {
            if ( !$this -> _modelo )
              {
                 $this -> getORM_ENGINE();
              }
              
            if ( $this -> _modelo )
              {
                // var_dump( $conexion, $tabla );
                 $this -> _modelo -> setUbicacion_modelo($this -> _ubicacion_modelo );
                
                 $this -> _modelo -> generarModelo( $conexion, $tabla );
                 
                 return true;
              }  
              
            return false;  
         } 

         /**
          * 
          * Nombre         	: 	generarClase
          * Descripcion   	:	
          * Version 			:  	1.0
          * Autor:			:	Juan Jose Muñiz Juarez
          * Fecha y Hora		:	06/05/2012, 14:03:44
          * @param  $modelo
          * @param  $ubicacion_modelo
          * @param  $objeto
          * @param  $campo_id
          * @param  $autoincrement
          * @return boolean
          */
       public function generarClase( $modelo, $ubicacion_modelo = null, $objeto = null, $campo_id = null, $autoincrement = null )
         {
            if ( $this -> _generar_clase )
              {
                $clase = new GeneracionClases();
               
                $clase -> generarMetodoSave();
                $clase -> generarMetodoUpdate();
                $clase -> generarMetodoFind();
                $clase -> generarMetodoDelete();
                $clase -> generarMetodoLoad();
                $clase -> generarMetodoFindById();
                $clase -> generarMetodoFindAll();
               
                $clase -> generarClase( $modelo, $this -> _ubicacion_clase, $ubicacion_modelo, $objeto, $campo_id, $autoincrement );
                
                return true;
              }
              
            return false;  
         }  
   }
   
  // $mod = new ModeloBD( "usuario" );
   
  // $mod ->generarModelo();